home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Merciful 2
/
Merciful - Disc 2.iso
/
software
/
h
/
highspeedpascalv2.0b.dms
/
highspeedpascalv2.0b.adf
/
Demos
/
DirDemo.pas
next >
Wrap
Pascal/Delphi Source File
|
1992-01-16
|
3KB
|
99 lines
Program Dirdemo;
{$R+ Enables Ctrl-C breaks too}
Uses Dos;
{ Filename: DirDemo.pas }
{ Coder : Jacob V. Pedersen }
{ Coded : 4-8-1990 }
{ Amiga : Christen Fihl 1991 }
{ Purpose : Example }
{ Make a file listing with attributes shown }
{==========================================================================
Exercise for you:
Make code to calculate the total size of the directory,
and the total number of files in the directory
==========================================================================}
CONST
DisplayAttr: Boolean = True; { Show file attributes ? }
DisplayTime: Boolean = True; { --------- time stamp ? }
DisplayDate: Boolean = True; { --------- date stamp ? }
OnlyArcFiles: Boolean = False; { Only search for A flags }
PauseParam: Boolean = False; { Pause after each screen?}
DirName: DirStr = ''; { Current directory, initialized }
VAR
DosData : SearchRec; { Information from DOS }
Dt : DateTime; { Holds the date and time }
N : Integer;
S : String;
{$Ifdef CPU86}
Const
DirFlags = '---vda----------';
{$Endif}
{ Traverse the directory while displaying the file information }
Procedure ShowDir( DirName : DirStr );
Var
N,LineCounter : Integer;
Attr: Word;
Ch : Char;
DirFlag: String[16];
Begin
DirFlag:=DirFlags;
LineCounter := 0;
If OnlyArcFiles then Attr:=Archive else Attr:=AnyFile;
FindFirst( DirName, Attr, DosData );
With DosData,Dt DO
While (DosError = 0) DO Begin
If (LineCounter = 24) AND PauseParam then Begin
LineCounter := 0;
Write('Press Return'); ReadLn;
End;
Inc(LineCounter);
UnpackTime(Time,Dt);
Write(Name,'':20-Length(Name));
if Attr and VolumeID <> 0 then Write('<VOL>':10) else
If Attr and Directory <> 0 then Write('<DIR>' :10) else Write(Size:10);
If DisplayAttr then Begin
Write(' ');
for N:=Length(DirFlag) downto 1 do
if Attr and (1 shl (N-1)) <> 0 then
write(DirFlag[N]) else write('-');
End;
If DisplayDate then Write(Day:6,'-',Month div 10,Month mod 10,'/',Year);
If DisplayTime then Write(Hour:6,'.',Min div 10, Min mod 10);
Writeln;
FindNext(DosData);
End; { while doserror = 0 }
End; { ShowDir }
BEGIN { main }
for N:=1 to ParamCount do begin {Read all parameters from command line}
S:=ParamStr(N);
if (Length(S)=2) and (S[1] in ['-','/']) then
case UpCase(S[2]) of
'A': OnlyArcFiles:=True;
'P': PauseParam :=True;
'D': {$Ifdef Amiga} PatternProc:=@PCDosPattern {$Endif};
'A': DisplayAttr:=False;
'T': begin DisplayTime:=False; DisplayDate:=False; end;
else Writeln('Bad parameter: ',S);
end
else DirName := S;
end;
{$Ifdef Amiga}
if DirName='' then
if PatternProc=@PCDosPattern then Dirname:='*.*' else DirName:='#?';
{$Else}
if DirName='' then DirName:='*.*';
{$Endif}
ShowDir(DirName);
END.